﻿using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Zhy.DAL.Models;

namespace Zhy.DAL
{
    /// <summary>
    /// 用作操作数据库的核心上下文
    /// </summary>
    public class ZhyDbContext : DbContext
    {
        /// <summary>
        /// 初始化
        /// </summary>
        public ZhyDbContext()
        {

        }

        /// <summary>
        /// 传递参数交给父类来创建当前Context的实例配置
        /// base(options)：参数的实例化交给父类去实现
        /// </summary>
        /// <param name="options"></param>
        public ZhyDbContext(DbContextOptions<ZhyDbContext> options) : base(options)
        {

        }

        #region 需要操作的数据库表---对应的实体都需要再这里配置
        #region 学生管理项目
        /// <summary>
        /// 用于信息表 
        /// </summary>
        public virtual DbSet<UserInfo> UserInfo { get; set; }
        /// <summary>
        /// 学生信息表
        /// </summary>
        public virtual DbSet<StudentInfo> StudentInfo { get; set; }
        /// <summary>
        /// 班级表
        /// </summary>
        public virtual DbSet<ViewClassInfo> ViewClassInfo { get; set; }
        #endregion

        public virtual DbSet<Company> Company { get; set; }

        public virtual DbSet<SysUser> SysUsers { get; set; }

        #endregion

        /// <summary>
        /// 补充配置操作数据库上下文Dbcontex的信息
        /// </summary>
        /// <param name="optionsBuilder"></param>
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            //配置一个数据库连接字符串
            if (!optionsBuilder.IsConfigured)// 判断是否配置过数据库连接字符串
            {
                // 配置MySql数据库连接
                //optionsBuilder.UseMySql(ServerVersion.AutoDetect("server=localhost;database=mytest;user=root;password=123456;port=3306;pooling=true;max pool size=20;persist security info=True;charset=utf8mb4;"),
                // 配置SqlServer数据库连接
                //optionsBuilder.UseSqlServer("Data Source=MS-AIFPOYYDVIRU;Initial Catalog=WPFCustomerDB;Persist Security Info=True;User ID=sa;Password=123456;Encrypt=True;Trust Server Certificate=True");
                // 配置SqlLite数据库连接
                optionsBuilder.UseSqlite("Data Source=sqlite.db");
            }

        }

        /// <summary>
        /// 配置实体对象的映射关系 - 如果没有配置就与数据库完全匹配
        /// 
        /// 如果这里要配置的
        /// 1.主键关联关系
        /// 2.表名称映射关系
        /// 3.属性名称的映射关系
        /// 4.主外键关系
        /// 5.默认值
        /// 6.初始值。。。。
        /// 
        /// 
        /// </summary>
        /// <param name="modelBuilder"></param>
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Company>(entity =>
            {
                entity.ToTable("Company")  // 配置实体对应的数据库表名称
                .HasKey(c => c.Id);  //配置主键
            });

            modelBuilder.Entity<UserInfo>(entity =>
            {
                entity.ToTable("UserInfo")  // 配置实体对应的数据库表名称
                .HasKey(c => c.UserId);  //配置主键
            });
        }
    }
}
